ãããã¯ãã§ãŒã³ã®ã¹ã±ãŒã©ããªãã£ã®ããã®ããã³ããšã³ãã¹ããŒããã£ãã«ãæ¢æ±ãé«éã§å®äŸ¡ãªãªããã§ãŒã³ååŒãå®çŸããdAppã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããæ¹æ³ãåŠã¶ã
ããã³ããšã³ããããã¯ãã§ãŒã³ã¹ããŒããã£ãã«ïŒã¹ã±ãŒã©ãã«ãªdAppsåãã®ãªããã§ãŒã³ååŒåŠç
ãããã¯ãã§ãŒã³æè¡ã¯é©æ°çã§ãããéèŠãªã¹ã±ãŒã©ããªãã£ã®èª²é¡ã«çŽé¢ããŠããŸãããã¹ãŠã®ååŒããªã³ãã§ãŒã³ã§åŠçãããšãé«é¡ãªååŒææ°æïŒã¬ã¹ä»£ïŒããé ãç¢ºèªæéããããã¯ãŒã¯ã®æ··éã«ã€ãªããå¯èœæ§ããããŸããããã¯åæ£åã¢ããªã±ãŒã·ã§ã³ïŒdAppsïŒã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒã«æªåœ±é¿ãåãŒããäž»æµã®æ®åã劚ããŠããŸãããããã®èª²é¡ã«å¯Ÿããææãªè§£æ±ºçã®1ã€ã¯ãã¹ããŒããã£ãã«ã®äœ¿çšã§ãããã®èšäºã§ã¯ãããã³ããšã³ããããã¯ãã§ãŒã³ã¹ããŒããã£ãã«ã«ã€ããŠæãäžãããã®æ©èœãå©ç¹ã課é¡ãããã³å®éã®ã¢ããªã±ãŒã·ã§ã³ãæ¢ããŸãããããã®ãã£ãã«ããããé«éã§å®äŸ¡ã§ãããã¹ã±ãŒã©ãã«ãªdAppsãäœæããããã«ãªããã§ãŒã³ååŒåŠçãã©ã®ããã«å¯èœã«ãããã«çŠç¹ãåœãŠãŸãã
ã¹ããŒããã£ãã«ãšã¯ïŒ
æ¬è³ªçã«ãã¹ããŒããã£ãã«ã¯ãåå è ãã¡ã€ã³ã®ãããã¯ãã§ãŒã³å€ã§è€æ°ã®ååŒãå®è¡ã§ããã¬ã€ã€ãŒ2ã¹ã±ãŒãªã³ã°ãœãªã¥ãŒã·ã§ã³ã§ããé »ç¹ã«ååŒããã2人以äžã®åœäºè éã®çŽæ¥çã§ãã©ã€ããŒããªéä¿¡åç·ãéããããªãã®ã§ãããã£ãã«ã®ééã®ã¿ããªã³ãã§ãŒã³ååŒãå¿ èŠãšããã¡ã€ã³ã®ãããã¯ãã§ãŒã³ãžã®è² è·ãå€§å¹ ã«è»œæžããŸãã
ç°¡åãªäŸããããŸããããªããšå人ãè³ããããŠã²ãŒã ãããŠãããšããŸããåè³ããå ¬éå°åž³ïŒãããã¯ãã§ãŒã³ïŒã«æžã蟌ã代ããã«ãåã ã®ã¹ã³ã¢ãšè³ãéãå¥ã®çŽïŒã¹ããŒããã£ãã«ïŒã«èšé²ããããšã«åæããŸããã²ãŒã ãçµäºãããšãã«ã®ã¿ãæçµçãªçµæãå ¬éå°åž³ã«èšé²ããŸãã
ã¹ããŒããã£ãã«ã®ä»çµã¿
äžè¬çãªããã»ã¹ã¯æ¬¡ã®æé ãå«ã¿ãŸãã
- ãã£ãã«ã®åæåïŒåå è ã¯ãã¡ã€ã³ã®ãããã¯ãã§ãŒã³äžã®ãã«ãã·ã°ããã£ã¹ããŒãã³ã³ãã©ã¯ãã«è³éãé ããŸãããã®ã³ã³ãã©ã¯ãã¯ãã¹ããŒããã£ãã«ã®åºç€ãšããŠæ©èœããŸãã
- ãªããã§ãŒã³ååŒïŒåå è ã¯ããã£ãã«å ã®ååŒã衚ã眲åä»ãã¡ãã»ãŒãžã亀æããŸãããããã®ååŒã¯ããã£ãã«ã®ç¶æ ïŒäŸïŒæ®é«ãã²ãŒã ã®ç¶æ ïŒãæŽæ°ããŸããéèŠãªã®ã¯ããããã®ååŒã¯ãããã¯ãã§ãŒã³ã«*ãããŒããã£ã¹ããããªã*ãšããããšã§ãã
- ç¶æ ã®æŽæ°ïŒåãªããã§ãŒã³ååŒã¯ãææ¡ãããæ°ããç¶æ ã衚ããŸããåå è ã¯ããããã®ç¶æ ã®æŽæ°ã«ããžã¿ã«çœ²åãè¡ããåæã®æå·åŠç蚌æãæäŸããŸããæãæè¿ã®ãåæãããç¶æ ãããã£ãã«ã®æå¹ãªç¶æ ãšèŠãªãããŸãã
- ãã£ãã«ã®ã¯ããŒãºïŒåå è ãååŒãçµããããäžæ¹ã®åœäºè ãæçµç¶æ ïŒãã¹ãŠã®åå è ã«ãã£ãŠçœ²åããããã®ïŒãã¹ããŒãã³ã³ãã©ã¯ãã«éä¿¡ããŸããã¹ããŒãã³ã³ãã©ã¯ãã¯çœ²åãæ€èšŒããæçµç¶æ ã«åŸã£ãŠè³éãåé ããŸãã
ãªãããã³ããšã³ãã¹ããŒããã£ãã«ãªã®ãïŒ
äŒçµ±çã«ãã¹ããŒããã£ãã«ã®å®è£ ã«ã¯ãéèŠãªããã¯ãšã³ãã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠã§ãããããã³ããšã³ãã¹ããŒããã£ãã«ã¯ããã£ãã«ç®¡çããžãã¯ã®å€ããã¯ã©ã€ã¢ã³ãåŽïŒãã©ãŠã¶ãŸãã¯ã¢ãã€ã«ã¢ããªïŒã«ç§»åããããšã§ãããã»ã¹ãç°¡çŽ åããããšãç®æããŠããŸããããã«ãããããã€ãã®å©ç¹ãæäŸãããŸãã
- ãµãŒããŒãµã€ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®åæžïŒéäžåãµãŒããŒãžã®äŸå床ãäœããããéçšã³ã¹ããåæžããã忣åãåäžããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒããéãååŒé床ãšããäœãææ°æã«ãããããå¿çæ§ãé«ããæ¥œãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸãã
- ãã©ã€ãã·ãŒã®åŒ·åïŒååŒã¯ãŠãŒã¶ãŒã®ããã€ã¹éã§çŽæ¥è¡ãããããã第äžè ãžã®ååŒããŒã¿ã®é²åºãæå°éã«æããŸãã
- éçºã®ç°¡çŽ åïŒããã³ããšã³ãã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã¯ãã¹ããŒããã£ãã«ç®¡çã«é¢ããè€éãã®å€ããæœè±¡åã§ãããããéçºè ãdAppsã«ã¹ããŒããã£ãã«ãçµ±åãããããªããŸãã
ããã³ããšã³ãã¹ããŒããã£ãã«å®è£ ã®äž»èŠã³ã³ããŒãã³ã
å žåçãªããã³ããšã³ãã¹ããŒããã£ãã«ã®å®è£ ã«ã¯ã次ã®ã³ã³ããŒãã³ããå«ãŸããŸãã
- ã¹ããŒãã³ã³ãã©ã¯ãïŒãããã¯ãã§ãŒã³ã«ãããã€ããããã«ãã·ã°ããã£ã¹ããŒãã³ã³ãã©ã¯ãããã®ã³ã³ãã©ã¯ãã¯ãæåã®é éãè³éã®åŒãåºããããã³çŽäºè§£æ±ºã管çããŸããã¹ããŒããã£ãã«ã®ã«ãŒã«ãå®çŸ©ãããã¹ãŠã®åå è ãããã«åŸãããšãä¿èšŒããŸãã
- ããã³ããšã³ãã©ã€ãã©ãª/SDKïŒããã³ããšã³ãããã¹ããŒããã£ãã«ã管çããããã®APIãæäŸããJavaScriptã©ã€ãã©ãªãŸãã¯SDKããã®ã©ã€ãã©ãªã¯ã眲åã®çæãã¡ãã»ãŒãžã®éä¿¡ãã¹ããŒãã³ã³ãã©ã¯ããšã®å¯Ÿè©±ãªã©ã®ã¿ã¹ã¯ãåŠçããŸããäŸãšããŠã¯ãEthers.jsãŸãã¯Web3.jsãäžå¿ã«æ§ç¯ãããã©ã€ãã©ãªããããŸãããã¹ããŒããã£ãã«åºæã®æäœã«æé©åãããŠããŸãã
- ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ã€ãŒïŒåå è ããªããã§ãŒã³ã§äºãã«éä¿¡ããããã®ã¡ã«ããºã ãããã¯ããã¢ããŒãã¢ïŒP2PïŒãããã¯ãŒã¯ãéäžåã¡ãã»ãŒãžã³ã°ãµãŒãã¹ããŸãã¯ãã®äž¡æ¹ã®çµã¿åããã§ããå¯èœæ§ããããŸããã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ã€ãŒã¯ã眲åä»ãã®ç¶æ ã®æŽæ°ãåå è éã§å®å šã«éä¿¡ãã圹å²ãæ ããŸããäŸãšããŠã¯ãWebSocketsãlibp2pããŸãã¯ã«ã¹ã¿ã ã¡ãã»ãŒãžã³ã°ãããã³ã«ãªã©ããããŸãã
- ç¶æ 管çïŒã¯ã©ã€ã¢ã³ãåŽã§ã®ãã£ãã«ã®ç¶æ ã管çããããã®ããžãã¯ãããã«ã¯ãæ®é«ãã²ãŒã ã®ç¶æ ãããã³ãã®ä»ã®é¢é£æ å ±ã®è¿œè·¡ãå«ãŸããŸããããŒã¿ã®æŽåæ§ã確ä¿ããç«¶åãåé¿ããã«ã¯ãå¹ççãªç¶æ 管çãäžå¯æ¬ ã§ãã
ããã³ããšã³ãã¹ããŒããã£ãã«ã䜿çšããå©ç¹
ããã³ããšã³ãã¹ããŒããã£ãã«ã¯ãdAppéçºè ãšãŠãŒã¶ãŒã«ããŸããŸãªå©ç¹ãæäŸããŸãã
ã¹ã±ãŒã©ããªãã£ã®åŒ·å
ååŒã®å€§éšåããªããã§ãŒã³ã§åŠçããããšã«ãããã¹ããŒããã£ãã«ã¯ã¡ã€ã³ãããã¯ãã§ãŒã³ãžã®è² è·ãå€§å¹ ã«è»œæžããããé«ããã©ã³ã¶ã¯ã·ã§ã³ã¹ã«ãŒããããšã¹ã±ãŒã©ããªãã£ã®åäžãå¯èœã«ããŸããããã¯ããªã³ã©ã€ã³ã²ãŒã ããã€ã¯ããã€ã¡ã³ããã©ãããã©ãŒã ããœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ãªã©ãé »ç¹ãªã€ã³ã¿ã©ã¯ã·ã§ã³ãå¿ èŠãšããdAppsã«ãšã£ãŠç¹ã«éèŠã§ãã
ååŒææ°æã®åæž
ãªããã§ãŒã³ååŒã¯ããªã³ãã§ãŒã³ååŒãšæ¯èŒããŠãå€§å¹ ã«äœãææ°æãè² æ ããŸããããã«ãããã¹ããŒããã£ãã«ã¯ãé«é¡ãªååŒææ°æãçŠæ¢ãããå¯èœæ§ã®ãããã€ã¯ããã€ã¡ã³ãããã®ä»ã®ãŠãŒã¹ã±ãŒã¹ã«æé©ã§ãããŠãŒã¶ãŒãèŠèŽ1åããããæ¯æããã¹ããªãŒãã³ã°ãµãŒãã¹ãæ³åããŠãã ãããã¹ããŒããã£ãã«ã¯ãé«é¡ãªã¬ã¹ä»£ã®è² æ ãªãã«ãããã®ãã€ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãå¯èœã«ããŸãã
ããé«éãªååŒé床
ãªããã§ãŒã³ååŒã¯ã»ãŒç¬æã«åŠçããããããã¡ã€ã³ãããã¯ãã§ãŒã³ã§ã®ãããã¯ç¢ºèªãåŸ ã€ãããã¯ããã«é«éãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããŸããããã¯ããªã³ã©ã€ã³ã²ãŒã ãååŒãã©ãããã©ãŒã ãªã©ããªã¢ã«ã¿ã€ã ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«äžå¯æ¬ ã§ãããã¬ãŒããŒãåžå Žã®å€åã«è¿ éã«å¯Ÿå¿ããå¿ èŠããã忣åååŒæïŒDEXïŒãèããŠã¿ãŸããããã¹ããŒããã£ãã«ã䜿çšãããšãã»ãŒç¬æã®æ³šæå·è¡ãå¯èœã«ãªããŸãã
ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäž
ããé«éãªååŒé床ãšããäœãææ°æã®çµã¿åããã«ãããdAppãŠãŒã¶ãŒã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžããŸããããã«ããã忣åã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããšæ¡çšã®å¢å ã«ã€ãªããå¯èœæ§ããããŸãããªã³ãã§ãŒã³ååŒã«é¢é£ããæ©æŠãåãé€ãããšã«ãããã¹ããŒããã£ãã«ã¯dAppsãããå¿çæ§ãé«ãçŽæçã«æããããŸãã
ãã©ã€ãã·ãŒã®åäž
æ¬è³ªçã«ãã©ã€ããŒãã§ã¯ãããŸããããã¹ããŒããã£ãã«ã¯ããã£ãã«ã®ééãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ããããªãã¯ãããã¯ãã§ãŒã³ã«èšé²ãããããããªã³ãã§ãŒã³ååŒãšæ¯èŒããŠãã©ã€ãã·ãŒãåäžãããããšãã§ããŸãããã£ãã«å ã®åã ã®ååŒã®è©³çްã¯ãåå è éã§ãã©ã€ããŒããªãŸãŸã§ããããã¯ãååŒå±¥æŽãæ©å¯ã«ä¿ã¡ãããŠãŒã¶ãŒã«ãšã£ãŠæçã§ãã
ããã³ããšã³ãã¹ããŒããã£ãã«ã®å®è£ ã«ããã課é¡
ããã³ããšã³ãã¹ããŒããã£ãã«ã¯æ°å€ãã®å©ç¹ãæäŸããŸãããèæ ®ãã¹ã課é¡ãããã€ããããŸãã
è€éã
ã¹ããŒããã£ãã«ã®å®è£ ã¯è€éã«ãªãå¯èœæ§ããããæå·åãã¹ããŒãã³ã³ãã©ã¯ããããã³ãããã¯ãŒãã³ã°ã«é¢ããæ·±ãçè§£ãå¿ èŠã§ããéçºè ã¯ãã»ãã¥ãªãã£ã確ä¿ããè匱æ§ãé²ãããã«ããã£ãã«ããžãã¯ãæ éã«èšèšããå®è£ ããå¿ èŠããããŸããããžã¿ã«çœ²åãããã·ã¥ããã¯ãªã©ãé¢é£ããæå·ããªããã£ãã¯ãçè§£ããŠæ£ããå®è£ ããããšãé£ããå ŽåããããŸãã
ã»ãã¥ãªãã£ãªã¹ã¯
ã¹ããŒããã£ãã«ã¯ãäºéæ¯åºæ»æããªãã¬ã€æ»æããµãŒãã¹æåŠæ»æãªã©ã®ããŸããŸãªã»ãã¥ãªãã£ãªã¹ã¯ã«å¯ŸããŠè匱ã§ãããããã®ãªã¹ã¯ã軜æžããã«ã¯ãå ç¢ãªã»ãã¥ãªãã£å¯Ÿçãå®è£ ããããšãäžå¯æ¬ ã§ããããšãã°ãåå è ã¯ãã¹ãŠã®ç¶æ ã®æŽæ°ãæ éã«æ€èšŒããæ£ãã眲åãããŠããããšã確èªããå¿ èŠããããŸããããã«ãæªæã®ããã¢ã¯ã¿ãŒããä¿è·ããã«ã¯ãã¹ããŒãã³ã³ãã©ã¯ãã«ãããçŽäºè§£æ±ºã¡ã«ããºã ã®é©åãªå®è£ ãäžå¯æ¬ ã§ãã
ãŠãŒã¶ããªãã£
ã¹ããŒããã£ãã«ã䜿ããããããããšã¯å°é£ã§ãããŠãŒã¶ãŒã¯ãã¹ããŒããã£ãã«ã®åºæ¬çãªæŠå¿µãšãããããšã®å¯Ÿè©±æ¹æ³ãçè§£ããå¿ èŠããããŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯çŽæçã§äœ¿ããããå¿ èŠããããŸããMetaMaskã®ãããªãŠã©ã¬ããã¯ãè€éãªã¹ããŒããã£ãã«æäœããã€ãã£ãã«ãµããŒãããŠããªããããã«ã¹ã¿ã UIã³ã³ããŒãã³ããšãŠãŒã¶ãŒæè²ããã°ãã°å¿ èŠã«ãªããŸãã
ãããã¯ãŒã¯ã¬ã€ãã³ã·
ã¹ããŒããã£ãã«ã®ããã©ãŒãã³ã¹ã¯ãåå è éã®ãããã¯ãŒã¯ã¬ã€ãã³ã·ã®åœ±é¿ãåããå¯èœæ§ããããŸããé«ãã¬ã€ãã³ã·ã¯ãååŒåŠçã®é å»¶ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸããã¬ã€ãã³ã·ãæå°éã«æããå¿çæ§ã確ä¿ããã«ã¯ãé©åãªéä¿¡ãããã³ã«ãšã€ã³ãã©ã¹ãã©ã¯ãã£ãéžæããããšãéèŠã§ãã
ä¿¡é Œã§ããéä¿¡ãã£ãã«ãžã®äŸå
ã¹ããŒããã£ãã«ã¯ãåå è éã®ä¿¡é Œã§ããéä¿¡ãã£ãã«ã«äŸåããŸããéä¿¡ãã£ãã«ãäžæãããå ŽåãååŒãåŠçã§ããŸãããããããå ç¢ã§å埩åã®ããéä¿¡ã¡ã«ããºã ãéžæããããšãéèŠãªçç±ã§ãããã¡ãã»ãŒãžé ä¿¡ã®åé·ãã¹ãé¢ä¿ããå ŽåããããŸãã
ããã³ããšã³ãã¹ããŒããã£ãã«ã®ãŠãŒã¹ã±ãŒã¹
ããã³ããšã³ãã¹ããŒããã£ãã«ã¯ã次ã®ãããªããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãã
- ãã€ã¯ããã€ã¡ã³ããã©ãããã©ãŒã ïŒã³ã³ãã³ãã¯ãªãšãŒã¿ãŒããªã³ã©ã€ã³ãµãŒãã¹ãããã³ãã®ä»ã®ãŠãŒã¹ã±ãŒã¹åãã«ãé«éã§å®äŸ¡ãªãã€ã¯ããã€ã¡ã³ããå¯èœã«ããŸããã¹ããªãŒããŒã«ãã¥ãŒããšã«æ°ã»ã³ãã®ã»ãã®äžéšããããããããšãæ³åããŠãã ãããã¹ããŒããã£ãã«ã¯ããããçµæžçã«å®çŸããŸãã
- ãªã³ã©ã€ã³ã²ãŒã ïŒåæ£åãªã³ã©ã€ã³ã²ãŒã ã§ã®ãªã¢ã«ã¿ã€ã ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãšã²ãŒã å ååŒãä¿é²ããŸãããã¬ã€ã€ãŒã¯ãé«é¡ãªååŒææ°æããããã«ãã¢ã€ãã ãååŒããè³ããããããŒãã¡ã³ãã«åå ã§ããŸãã
- 忣åååŒæïŒDEXïŒïŒãªããã§ãŒã³ã®æ³šæç §åãšå®è¡ãå¯èœã«ããããšã«ããã忣åååŒæã®é床ãšå¹çãåäžãããŸãããã¬ãŒããŒã¯ããªã³ãã§ãŒã³ååŒãšæ¯èŒããŠãã¯ããã«é«éãã€å®äŸ¡ã«æ³šæãå®è¡ã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒåæ£åãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã§ã®ãã€ã¯ãããããã³ã³ãã³ãã®åçåãããã³ãã®ä»ã®ãœãŒã·ã£ã«ã€ã³ã¿ã©ã¯ã·ã§ã³ãå¯èœã«ããŸãããŠãŒã¶ãŒã¯ãé«é¡ãªååŒææ°æã®è² æ ãªãã«ãã¯ãªãšãŒã¿ãŒã®ã³ã³ãã³ãã«å ±é ¬ãäžããããšãã§ããŸãã
- IoTïŒã¢ãã®ã€ã³ã¿ãŒãããïŒããã€ã¹ïŒIoTãããã¯ãŒã¯ã§ã®ãã·ã³ããŒãã·ã³æ±ºæžãšããŒã¿äº€æãå¯èœã«ããŸããããã€ã¹ã¯ããµãŒãã¹ã®æéãèªåçã«æ¯æããããŒã¿ã亀æãã忣åããŒã±ãããã¬ã€ã¹ã«åå ã§ããŸããããšãã°ã黿°èªåè»ã¯ãã¹ããŒããã£ãã«ã䜿çšããŠå é»ã¹ããŒã·ã§ã³ã§ã®å 黿éãèªåçã«æ¯æãããšãã§ããŸãã
ã¹ããŒããã£ãã«ã®å®è£ ãšãããžã§ã¯ãã®äŸ
ããã€ãã®ãããžã§ã¯ããç©æ¥µçã«ã¹ããŒããã£ãã«æè¡ãéçºããã³å®è£ ããŠããŸããæ³šç®ãã¹ãäŸãããã€ã玹ä»ããŸãã
- Raiden NetworkïŒEthereumïŒïŒEthereumã®ã¹ã±ãŒã©ãã«ãªãã€ã¡ã³ããã£ãã«ãããã¯ãŒã¯ã®æ§ç¯ã«çŠç¹ãåœãŠããããžã§ã¯ããRaidenã¯ãEthereumãšã³ã·ã¹ãã å šäœã§é«éã§å®äŸ¡ãªããŒã¯ã³è»¢éãå¯èœã«ããããšãç®æããŠããŸããåæã®ãæãããç¥ãããŠããã¹ããŒããã£ãã«ãããžã§ã¯ãã®1ã€ã§ãã
- Celer NetworkïŒã¹ããŒããã£ãã«ããã³ãã®ä»ã®ã¹ã±ãŒãªã³ã°ãã¯ãããžãŒããµããŒãããã¬ã€ã€ãŒ2ã¹ã±ãŒãªã³ã°ãã©ãããã©ãŒã ãCeler Networkã¯ãã¹ã±ãŒã©ãã«ãªdAppsãæ§ç¯ããããã®çµ±äžãã©ãããã©ãŒã ãæäŸããããšãç®æããŠããŸããè€æ°ã®ãããã¯ãã§ãŒã³ããµããŒãããéçºè åãã®ããŒã«ãšãµãŒãã¹ã®ã¹ã€ãŒããæäŸããŠããŸãã
- Connext NetworkïŒããŸããŸãªãããã¯ãã§ãŒã³éã§é«éã§å®å šãªäŸ¡å€è»¢éãå¯èœã«ãããã¢ãžã¥ãŒã«åŒã®éã«ã¹ããã£ã¢ã«çžäºéçšæ§ãããã³ã«ãã¹ããŒããã£ãã«ããã³ãã®ä»ã®ãã¯ãããžãŒã掻çšããŠãã¯ãã¹ãã§ãŒã³ååŒãå¯èœã«ããŸãã
- CounterfactualïŒã¹ããŒããã£ãã«ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ãCounterfactualã¯ãã¹ããŒããã£ãã«ã¢ããªã±ãŒã·ã§ã³ã®éçºãç°¡çŽ åããäžé£ã®ããŒã«ãšã©ã€ãã©ãªãæäŸããŸããå¹ åºããŠãŒã¹ã±ãŒã¹ã«äœ¿çšã§ããããžã§ããªãã¯ã¹ããŒããã£ãã«ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§ç¯ã«çŠç¹ãåœãŠãŠããŸãã
æè¡çãªè©³çްïŒã·ã³ãã«ãªããã³ããšã³ãã¹ããŒããã£ãã«ã®å®è£
ããã³ããšã³ãã¹ããŒããã£ãã«ã®å®è£ ã®ã³ã¢ã³ã³ã»ããã説æããããã«ãç°¡ç¥åãããäŸãæŠèª¬ããŸãããããã®äŸã§ã¯ãJavaScriptãEthers.jsïŒEthereumãããã¯ãã§ãŒã³ãšã®å¯Ÿè©±çšïŒãããã³ãªããã§ãŒã³éä¿¡çšã®ã·ã³ãã«ãªWebSocketãµãŒããŒã䜿çšããŸãã
å 責äºé ïŒããã¯ã説æãç®çãšããç°¡ç¥åãããäŸã§ããå®çšŒåç°å¢ã§ã®å®è£ ã«ã¯ãããå ç¢ãªã»ãã¥ãªãã£å¯Ÿçãšãšã©ãŒåŠçãå¿ èŠã§ãã
1. ã¹ããŒãã³ã³ãã©ã¯ãïŒSolidityïŒ
ãã®ã·ã³ãã«ãªã¹ããŒãã³ã³ãã©ã¯ãã¯ã2ã€ã®åœäºè ãè³éãé ãã眲åãããç¶æ ã«åºã¥ããŠããããåŒãåºãããšãå¯èœã«ããŸãã
pragma solidity ^0.8.0;
contract SimpleStateChannel {
address payable public participant1;
address payable public participant2;
uint public depositAmount;
bool public isOpen = false;
mapping(address => uint) public balances;
constructor(address payable _participant1, address payable _participant2, uint _depositAmount) payable {
require(msg.value == _depositAmount * 2, "Initial deposit must be twice the deposit amount");
participant1 = _participant1;
participant2 = _participant2;
depositAmount = _depositAmount;
balances[participant1] = _depositAmount;
balances[participant2] = _depositAmount;
isOpen = true;
}
function closeChannel(uint participant1Balance, uint participant2Balance, bytes memory signature1, bytes memory signature2) public {
require(isOpen, "Channel is not open");
// Hash the state data
bytes32 hash = keccak256(abi.encode(participant1Balance, participant2Balance));
// Verify signatures
address signer1 = recoverSigner(hash, signature1);
address signer2 = recoverSigner(hash, signature2);
require(signer1 == participant1, "Invalid signature from participant 1");
require(signer2 == participant2, "Invalid signature from participant 2");
require(participant1Balance + participant2Balance == depositAmount * 2, "Balances must sum to total deposit");
// Transfer funds
participant1.transfer(participant1Balance);
participant2.transfer(participant2Balance);
isOpen = false;
}
function recoverSigner(bytes32 hash, bytes memory signature) internal pure returns (address) {
bytes32 r;
bytes32 s;
uint8 v;
// EIP-2098 signature
if (signature.length == 64) {
r = bytes32(signature[0:32]);
s = bytes32(signature[32:64]);
v = 27; // Assuming Ethereum mainnet/testnets
// Standard signature recovery
} else if (signature.length == 65) {
r = bytes32(signature[0:32]);
s = bytes32(signature[32:64]);
v = uint8(signature[64]);
} else {
revert("Invalid signature length");
}
return ecrecover(hash, v, r, s);
}
}
2. ããã³ããšã³ãïŒEthers.jsã䜿çšããJavaScriptïŒ
// Assume you have initialized ethersProvider and signer
// and have the contract address and ABI
const contractAddress = "YOUR_CONTRACT_ADDRESS";
const contractABI = [...]; // Your contract ABI
const contract = new ethers.Contract(contractAddress, contractABI, signer);
async function openChannel(participant1, participant2, depositAmount) {
const tx = await contract.constructor(participant1, participant2, depositAmount, { value: depositAmount * 2 });
await tx.wait();
console.log("Channel opened!");
}
async function closeChannel(participant1Balance, participant2Balance) {
// Hash the state data
const hash = ethers.utils.keccak256(ethers.utils.defaultAbiCoder.encode(["uint", "uint"], [participant1Balance, participant2Balance]));
// Sign the hash
const signature1 = await signer.signMessage(ethers.utils.arrayify(hash));
const signature2 = await otherSigner.signMessage(ethers.utils.arrayify(hash)); // Assuming you have access to the other signer
// Call the closeChannel function on the smart contract
const tx = await contract.closeChannel(participant1Balance, participant2Balance, signature1, signature2);
await tx.wait();
console.log("Channel closed!");
}
3. ãªããã§ãŒã³éä¿¡ïŒWebSocket - ç°¡ç¥åïŒ
ããã¯éåžžã«åºæ¬çãªäŸã§ããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããå ç¢ã§å®å šãªéä¿¡ãããã³ã«ãå¿ èŠã«ãªããŸãã
// Client-side (Participant A)
const socket = new WebSocket("ws://localhost:8080");
socket.onopen = () => {
console.log("Connected to WebSocket server");
};
socket.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === "stateUpdate") {
// Verify the state update (signatures, etc.)
// Update local state
console.log("Received state update:", message.data);
}
};
function sendStateUpdate(newState) {
socket.send(JSON.stringify({ type: "stateUpdate", data: newState }));
}
// Simple Server-side (Node.js)
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
console.log('Client connected');
ws.onmessage = message => {
console.log(`Received message: ${message.data}`);
wss.clients.forEach(client => {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message.data.toString()); // Broadcast to other clients
}
});
};
ws.on('close', () => {
console.log('Client disconnected');
});
});
console.log('WebSocket server started on port 8080');
説æïŒ
- ã¹ããŒãã³ã³ãã©ã¯ãïŒ`SimpleStateChannel`ã³ã³ãã©ã¯ãã¯ãæåã®é éã管çããæ®é«ãä¿åããè³éã®åŒãåºããèš±å¯ããåã«çœ²åãæ€èšŒããŸãã`closeChannel`颿°ã¯ãäž¡åœäºè ãæäŸãã眲åãæçµç¶æ ïŒæ®é«ïŒã«å¯ŸããŠæå¹ã§ãããã©ãããæ€èšŒããŠããè³éãè§£æŸãããããéåžžã«éèŠã§ãã
- ããã³ããšã³ãïŒJavaScriptã³ãŒãã¯Ethers.jsã䜿çšããŠã¹ããŒãã³ã³ãã©ã¯ããšå¯Ÿè©±ããŸããããã«ã¯ããã£ãã«ãééããããã®é¢æ°ãå«ãŸããŠããŸãã`closeChannel`颿°ã¯ããŠãŒã¶ãŒã®ç§å¯éµã䜿çšããŠæçµç¶æ ïŒæ®é«ïŒã«çœ²åãã眲åãã¹ããŒãã³ã³ãã©ã¯ãã«éä¿¡ããŸãã
- ãªããã§ãŒã³éä¿¡ïŒWebSocketãµãŒããŒã¯ãåå è ãç¶æ ã®æŽæ°ã亀æããããã®ã·ã³ãã«ãªéä¿¡ãã£ãã«ãæäŸããŸããå®éã®ã·ããªãªã§ã¯ãçµã¿èŸŒã¿ã®ã»ãã¥ãªãã£æ©èœãåããããæŽç·Žãããéä¿¡ãããã³ã«ã䜿çšããããšã«ãªããŸãã
ã¯ãŒã¯ãããŒïŒ
- åå è ã¯ãã¹ããŒãã³ã³ãã©ã¯ãããããã€ããè³éãé ããŸãã
- WebSocketãµãŒããŒã«æ¥ç¶ããŸãã
- WebSocketãµãŒããŒãä»ããŠã眲åãããç¶æ ã®æŽæ°ïŒäŸïŒæ®é«ã®å€æŽïŒã亀æããŸãã
- çµäºããããæçµæ®é«ãšçœ²åã䜿çšããŠãã¹ããŒãã³ã³ãã©ã¯ãã§`closeChannel`颿°ãåŒã³åºããŸãã
ããã³ããšã³ãã¹ããŒããã£ãã«ã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
ã¹ããŒããã£ãã«ãå®è£ ããå Žåãã»ãã¥ãªãã£ãæãéèŠã§ãã以äžã¯ãããã€ãã®éèŠãªã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ã§ãã
- çœ²åæ€èšŒïŒç¶æ ã®æŽæ°ãåãå ¥ããåã«ãåžžã«ç¶æ ã®æŽæ°ã®çœ²åãæ³šææ·±ãæ€èšŒããŸããå ç¢ãªçœ²åã©ã€ãã©ãªã䜿çšãã眲åãæ£ããç§å¯éµã䜿çšããŠçæãããŠããããšã確èªããŸããã¹ããŒãã³ã³ãã©ã¯ãã¯ãè³éãè§£æŸããåã«*å¿ ã*眲åãæ€èšŒããå¿ èŠããããŸãã
- ãã³ã¹ããŒã管çïŒãªãã¬ã€æ»æãé²ãããã«ããã³ã¹ããŒãïŒäžæã®èå¥åïŒã䜿çšããŸããåç¶æ ã®æŽæ°ã«ã¯ãåååŒã§ã€ã³ã¯ãªã¡ã³ããããäžæã®ãã³ã¹ããŒããå«ããå¿ èŠããããŸããã¹ããŒãã³ã³ãã©ã¯ããšããã³ããšã³ãããžãã¯ããæ£ãããã³ã¹ããŒãã®äœ¿çšã匷å¶ããããšã確èªããŸãã
- ç¶æ æ€èšŒïŒãã£ãã«ã«ãŒã«ãšççŸããªãããšã確èªããããã«ããã¹ãŠã®ç¶æ ã®æŽæ°ã培åºçã«æ€èšŒããŸããããšãã°ããã€ã¡ã³ããã£ãã«ã®æ®é«ãç·é ééãè¶ ããŠããªãããšã確èªããŸãã
- çŽäºè§£æ±ºïŒã¹ããŒãã³ã³ãã©ã¯ãã«å ç¢ãªçŽäºè§£æ±ºã¡ã«ããºã ãå®è£ ããŸãããã®ã¡ã«ããºã ã«ãããåå è ã¯ç¡å¹ãªç¶æ ã®æŽæ°ã«ç°è°ãå±ããçŽäºãå ¬æ£ã«è§£æ±ºã§ããããã«ãªããŸããã¹ããŒãã³ã³ãã©ã¯ãã«ã¯ãç°è°ãå±ããããšãã§ããã¿ã€ã ã¢ãŠãæéãå¿ èŠã§ãã
- DoSä¿è·ïŒãµãŒãã¹æåŠïŒDoSïŒæ»æããä¿è·ããããã®å¯Ÿçãå®è£ ããŸããããšãã°ãç¹å®ã®æéå ã«éä¿¡ã§ããç¶æ ã®æŽæ°ã®æ°ãå¶éããŸãã
- å®å šãªéµç®¡çïŒç¶æ ã®æŽæ°ã«çœ²åããããã«äœ¿çšãããç§å¯éµãå®å šã«ä¿ç®¡ããã³ç®¡çããŸããããŒããŠã§ã¢ãŠã©ã¬ãããŸãã¯ãã®ä»ã®å®å šãªéµä¿ç®¡ãœãªã¥ãŒã·ã§ã³ã䜿çšããŸããç§å¯éµããã¬ãŒã³ããã¹ãã§ä¿åããªãã§ãã ããã
- ç£æ»ïŒæœåšçãªè匱æ§ãç¹å®ããŠå¯ŸåŠããããã«ãè©å€ã®è¯ãã»ãã¥ãªãã£äŒç€Ÿã«ã³ãŒããç£æ»ããŠããããŸãã
ããã³ããšã³ãã¹ããŒããã£ãã«ã®æªæ¥
ããã³ããšã³ãã¹ããŒããã£ãã«ã¯ããããã¯ãã§ãŒã³ã®ã¹ã±ãŒã©ããªãã£ãšãŠãŒã¶ããªãã£ã«ãããŠéèŠãªäžæ©ã衚ããŠããŸããdAppsãããè€éã«ãªããèŠæ±ãå³ãããªãã«ã€ããŠãå¹ççãªãªããã§ãŒã³ååŒåŠçã®å¿ èŠæ§ã¯é«ãŸãäžæ¹ã§ããã¹ããŒããã£ãã«æè¡ã®ãããªã鲿©ãèŠèŸŒãŸããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- æ¹åãããããŒã«ïŒããéçºè ãã¬ã³ããªãŒãªã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã«ãããã¹ããŒããã£ãã«ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãšãããã€ã容æã«ãªããŸãã
- æšæºåïŒã¹ããŒããã£ãã«éä¿¡ããã³ããŒã¿åœ¢åŒã®æšæºåããããããã³ã«ã¯ãããŸããŸãªå®è£ éã®çžäºéçšæ§ãåäžãããŸãã
- æ¢åã®ãŠã©ã¬ãããšã®çµ±åïŒäžè¬çãªãŠã©ã¬ãããšã®ã·ãŒã ã¬ã¹ãªçµ±åã«ããããŠãŒã¶ãŒã¯ã¹ããŒããã£ãã«ã«ç°¡åã«é¢äžã§ããŸãã
- ããè€éãªç¶æ é·ç§»ã®ãµããŒãïŒã¹ããŒããã£ãã«ã¯ãããè€éãªç¶æ é·ç§»ããµããŒãã§ããããã«ãªããããå¹ åºãã¢ããªã±ãŒã·ã§ã³ãå¯èœã«ããŸããããšãã°ãããè€éãªã²ãŒã ããžãã¯ãåãããã«ãããŒãã£ãã£ãã«ã®ãµããŒããªã©ã§ãã
- ãã€ããªããã¢ãããŒãïŒããã«åªããã¹ã±ãŒã©ããªãã£ãå®çŸããããã«ãã¹ããŒããã£ãã«ãããŒã«ã¢ãããªã©ã®ä»ã®ã¬ã€ã€ãŒ2ã¹ã±ãŒãªã³ã°ãœãªã¥ãŒã·ã§ã³ãšçµã¿åãããã
çµè«
ããã³ããšã³ããããã¯ãã§ãŒã³ã¹ããŒããã£ãã«ã¯ãdAppsãã¹ã±ãŒãªã³ã°ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®åŒ·åãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸããé«éãå®äŸ¡ããã©ã€ããŒããªãªããã§ãŒã³ååŒãå¯èœã«ããããšã«ãããã¹ããŒããã£ãã«ã¯åæ£åã¢ããªã±ãŒã·ã§ã³ã®æ°ããå¯èœæ§ãè§£ãæŸã¡ãŸããå æãã¹ã課é¡ã¯ãããŸãããã¹ããŒããã£ãã«ã®å©ç¹ã¯åŠå®ã§ããããããã¯ãã§ãŒã³æè¡ã®æªæ¥ã«ãããŠéèŠãªåœ¹å²ãæããæºåãã§ããŠããŸãããã¯ãããžãŒãæçããããå€ãã®éçºè ãã¹ããŒããã£ãã«ãæ¡çšããã«ã€ããŠãããå¹ åºãèŠèŽè ã«ãªãŒãã§ãããã¹ã±ãŒã©ãã«ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªæ¬¡äžä»£ã®dAppsãç»å ŽããããšãæåŸ ã§ããŸãã